From 67728ac004eff3cb2175a8c1db9bfbc749985cda Mon Sep 17 00:00:00 2001 From: Thomas Jaeger Date: Tue, 29 Sep 2009 02:14:12 -0400 Subject: [PATCH] Filter out events that the current window didn't select for Signed-off-by: Thomas Jaeger https://bugzilla.gnome.org/show_bug.cgi?id=588649 --- gdk/x11/gdkinput-x11.c | 49 +++++++++++++++++++++++++++++++++++++++ gdk/x11/gdkinput-xfree.c | 2 +- gdk/x11/gdkinputprivate.h | 3 +++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/gdk/x11/gdkinput-x11.c b/gdk/x11/gdkinput-x11.c index 5f1e3df950..37841b1183 100644 --- a/gdk/x11/gdkinput-x11.c +++ b/gdk/x11/gdkinput-x11.c @@ -701,6 +701,55 @@ _gdk_input_common_other_event (GdkEvent *event, return FALSE; /* wasn't one of our event types */ } +gboolean +_gdk_input_common_event_selected (GdkEvent *event, + GdkWindow *window, + GdkDevicePrivate *gdkdev) +{ + GdkWindowObject *priv = (GdkWindowObject *) window; + + switch (event->type) { + case GDK_BUTTON_PRESS: + return priv->extension_events & GDK_BUTTON_PRESS_MASK; + + case GDK_BUTTON_RELEASE: + return priv->extension_events & GDK_BUTTON_RELEASE_MASK; + + case GDK_KEY_PRESS: + return priv->extension_events & GDK_KEY_PRESS_MASK; + + case GDK_KEY_RELEASE: + return priv->extension_events & GDK_KEY_RELEASE_MASK; + + case GDK_MOTION_NOTIFY: + if (priv->extension_events & GDK_POINTER_MOTION_MASK) + return TRUE; + if (gdkdev->button_count && (priv->extension_events & GDK_BUTTON_MOTION_MASK)) + return TRUE; + + if ((gdkdev->button_state[0] & 1 << 1) && (priv->extension_events & GDK_BUTTON1_MOTION_MASK)) + return TRUE; + if ((gdkdev->button_state[0] & 1 << 2) && (priv->extension_events & GDK_BUTTON2_MOTION_MASK)) + return TRUE; + if ((gdkdev->button_state[0] & 1 << 3) && (priv->extension_events & GDK_BUTTON3_MOTION_MASK)) + return TRUE; + + return FALSE; + + case GDK_PROXIMITY_IN: + return priv->extension_events & GDK_PROXIMITY_IN_MASK; + + case GDK_PROXIMITY_OUT: + return priv->extension_events & GDK_PROXIMITY_OUT_MASK; + + default: + return FALSE; + } + + +} + + gboolean _gdk_device_get_history (GdkDevice *device, GdkWindow *window, diff --git a/gdk/x11/gdkinput-xfree.c b/gdk/x11/gdkinput-xfree.c index 4d590ea9cf..d0f217c86e 100644 --- a/gdk/x11/gdkinput-xfree.c +++ b/gdk/x11/gdkinput-xfree.c @@ -291,7 +291,7 @@ _gdk_input_other_event (GdkEvent *event, display->ignore_core_events) gdk_input_check_proximity (GDK_WINDOW_DISPLAY (window)); - return TRUE; + return _gdk_input_common_event_selected(event, window, gdkdev); } gint diff --git a/gdk/x11/gdkinputprivate.h b/gdk/x11/gdkinputprivate.h index aeb440e9e0..51233c77b5 100644 --- a/gdk/x11/gdkinputprivate.h +++ b/gdk/x11/gdkinputprivate.h @@ -179,6 +179,9 @@ gint _gdk_input_common_other_event (GdkEvent *event XEvent *xevent, GdkWindow *window, GdkDevicePrivate *gdkdev); +gboolean _gdk_input_common_event_selected (GdkEvent *event, + GdkWindow *window, + GdkDevicePrivate *gdkdev); #endif /* !XINPUT_NONE */ -- 2.30.2